package cn.ffcs.bpmpvc.dao;

import java.util.List;

import cn.ffcs.base.web.PageControl;
import cn.ffcs.bpm.model.ProcTranRecord;
import cn.ffcs.bpm.model.ProcessConfig;
import cn.ffcs.bpm.model.ProcessConfigDetail;
import cn.ffcs.bpm.model.TransactProcessStatus;
import cn.ffcs.bpmpvc.graph.Node;
import cn.ffcs.bpmpvc.model.BpmSwimlane;
import cn.ffcs.bpmpvc.web.views.TaskView;
import cn.ffcs.organ.model.Person;
import cn.ffcs.security.model.User;
import cn.ffcs.system.dict.model.Dict;

public interface FlowPvcDao 
{	
	/**
	 * 获取一个活动的ProcTranRecord
	 * @param procinstId
	 * @return
	 */
	public ProcTranRecord getLiveProcTranRecord(Integer procinstId);
	/**
	 * 通过名称与所属流程获得流程节点
	 * @param name
	 * @param processId
	 * @return
	 */
	public ProcessConfigDetail getProcessConfigDetail(String name,String processId);
    /**
     * 保存数据记录
     * TODO 请输入方法说明
     * @param obj
     */
    public void save(Object obj);
    /**
     * 取得流程配置节点信息
     * TODO 请输入方法说明
     * @param processId
     * @return
     */
    public ProcessConfig getProcessConfig(String processId);
    /**
     * 取得流程开始节点
     * TODO 请输入方法说明
     * @param processId
     * @return
     */
    public ProcessConfigDetail getProcessStartNode(String processId);
    /**
     * 取得流程后续节点信息
     * TODO 请输入方法说明
     * @param currentTaskNodeId
     * @return
     */
    public List<ProcessConfigDetail> findNextTaskNode(Integer currentTaskNodeId);
    /**
     * 取得流程父节点
     * TODO 请输入方法说明
     * @param currentTaskNodeId
     * @return
     */
    public List<ProcessConfigDetail> findPretTaskNode(Integer currentTaskNodeId);
    
    /**
     * 得到任务信息
     * TODO 请输入方法说明
     * @param taskId
     * @return
     */
    public ProcTranRecord getTask(Integer taskId);
    /**
     * 得到任务信息
     * TODO 请输入方法说明
     * @param taskId
     * @param isLock 是否锁定记录
     * @return
     */
    public ProcTranRecord getTask(Integer taskId,boolean isLock);
    /**
     * 
     * TODO 请输入方法说明
     * @param executeInstId
     * @return
     */
    public TransactProcessStatus getProcessExecuteInstById(Integer executeInstId);
    /**
     * 通过流程实例id取对象
     * @param procinstId
     * @return
     */
    public TransactProcessStatus getProcessExecuteInstByProcinstId(Integer procinstId);
    /**
     * 查询任务信息
     * TODO 请输入方法说明
     * @param taskView
     * @param pageControl
     * @return
     */
    public List findTaskList(TaskView taskView,PageControl pageControl);
    /**
     * 根据流程实例ID，取得流程任务记录
     * TODO 请输入方法说明
     * @param processInstId
     * @return
     */
    public List<ProcTranRecord> findTaskList(Integer processInstId);
    /**
     * 
     * TODO 请输入方法说明
     * @param processInstId
     * @param idArr
     * @return
     */
    public List<ProcTranRecord> findTaskList(Integer processInstId,Integer idArr[]);
    /**
     * 更新分支节点任务信息
     * TODO 请输入方法说明
     * @param parentExecuteId
     * @param rollBackInfo
     */
    public void updateCompletForkTask(Integer parentExecuteId,String rollBackInfo);
    /**
     * 结束任务时，更新任务信息
     * TODO 请输入方法说明
     * @param taskId
     * @param content
     */
    public void updateCompleteTask(Integer taskId,String content);
    /**
     * 查子Execute流程实例控制信息
     * TODO 请输入方法说明
     * @param processInstId
     * @return
     */
    public List findProcessSubExecuteInstList(Integer parentExecuteId,String state,boolean isLock);
    /**
     * 
     * TODO 请输入方法说明
     * @param taskId
     * @return
     */
    public TransactProcessStatus getProcessExecuteInst(Integer taskId);
    /**
     * 删除子令牌令牌
     * TODO 请输入方法说明
     * @param parentExecuteId
     */
    public void deleteProcessSubExecute(Integer parentExecuteId);
    /**
     * 删除子令牌令牌
     * TODO 请输入方法说明
     * @param processInstId
     * @param state
     */
    public void deleteProcessSubExecute(Integer parentExecuteId,String state);
    /**
     * 根据节点的Id，查找节点提交的文档类型
     * TODO 请输入方法说明
     * @param nodeId
     * @return
     */
    public List<Dict> findDocumentTypeByNodeId(Integer nodeId);
    /**
     * 
     * TODO 请输入方法说明
     * @param procInstId
     * @param nodeIdArr
     * @return
     */
    public List findRunExecuteList(Integer procInstId,Integer nodeIdArr[]);
    
    /**
     * 
     * TODO 请输入方法说明
     * @param procInstId
     * @param nodeIdArr
     * @return
     */
    public List findAllExecuteList(Integer procInstId,Integer nodeIdArr[]);
    /**
     * 删除保存预配的任务人员信息
     * TODO 请输入方法说明
     * @param executeId
     */
    public void deleteTaskAssignUser(Integer executeId);
    /**
     * 
     * TODO 请输入方法说明
     * @param executeId
     * @return
     */
    public List findTaskAssignUser(Integer executeId);
    /**
     * 根据角色名称及流程实例ID，取得流程角色实例
     * TODO 请输入方法说明
     * @param swinlaneName
     * @param procinstId
     * @return
     */
    public BpmSwimlane getBpmSwimlane(String swinlaneName,Integer procinstId);
    /**
     *根据流程ID，取得流程角色实例
     * TODO 请输入方法说明
     * @param procinstId
     * @return
     */
    public List<BpmSwimlane> findBpmSwimlaneList(Integer procinstId);
    /**
     * 通过角色取得对应的用户列表
     * @param roleName
     * @return
     */
    public List<Person> findPersonByRoleName(String roleName);
    /**
     * 通过角色取得用户列表，是否包括用户组信息
     * @param roleName
     * @param isOrg
     * @return
     */
    public List<Person> findPersonByRoleName(String roleName,boolean isOrg);
    /**
     * 
     * @param processId
     * @return
     */
    public List<Node> findNodeList(String processId);
    /**
     * 
     * @param processId
     * @return
     */
    public List<Node> findNexNodeList(String processId);
    /**
     * 通过流程Id，取得运行中节点
     * @param procInstId
     * @return
     */
    public List<Node> findRunNodeList(String procInstId);
    /**
     * 通过流程实例ID，取得模板
     * @param procInstId
     * @return
     */
    public String getFlowProcessId(String procInstId);
    /**
     * 得到所有流程记录
     * @return
     */
    public List findAllProcessList();
    /**
     * 得到链式流程节点列表
     * @param startNodeId
     * @return
     */
    public List findAllPriorNextTep(String startNodeId);
    /**
     * 取得运行中的流程任务记录信息
     * @param procInstId
     * @return
     */
    public List findRunTaskList(Integer procInstId);
    /**
     * 取得最大值排序
     * @param procInstId
     * @return
     */
    @SuppressWarnings("unchecked")
	public User getUserByPerson(Integer personId);
    public int getMaxOrderBy(Integer procInstId);
	public List<ProcessConfigDetail> findAllProcessDetail(Integer parseInt);
	/**
	 * 强制结流程（包括结束任务及流程实例）
	 * @param procinstId
	 */
	public void endProcessInst(String procinstId);
	/**
	 * 查看用户是否拥有对应的角色
	 * @param roleName
	 * @param personId
	 * @return
	 */
	public boolean checkPersonHasRole(String roleName,String personId);
}
